home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2000 #4 / Amiga Plus CD - 2000 - No. 4.iso / PowerPC / Dev / PPCRelease / Examples / Bustest / BusTestPPCAsm.asm < prev    next >
Encoding:
Assembly Source File  |  1998-06-23  |  19.3 KB  |  957 lines

  1.  
  2.     NOLIST
  3.     ppc604
  4.     SUPER
  5.  
  6.  
  7. ;    include    "powerup/misc/ppcmacros.i"
  8.     include    "powerup/misc/ppcsymbols.i"
  9.  
  10.     bopt    uf
  11.  
  12.  
  13.     xdef    memreadlinetime
  14. memreadlinetime:
  15. ;memreadlinetime(address,lines,loop)
  16. ;memreadlinetime(gpr3,gpr4,gpr5)
  17.     srwi    gpr4,gpr4,#2        ;/4 == 4 lines each loop
  18. .retryloop:
  19.     mr    gpr6,gpr3        ;reload buffer address
  20.     mtctr    gpr4            ;load datamove counter
  21. .loop:
  22. ;    lwz    gpr0,0(gpr6)
  23. ;    lwz    gpr7,32(gpr6)
  24. ;    lwz    gpr8,64(gpr6)
  25. ;    lwz    gpr9,96(gpr6)
  26.     addi    gpr6,gpr6,#4*32
  27.     bdnz    .loop
  28.     addic.    gpr5,gpr5,#-1
  29.     bne    .retryloop
  30.  
  31.     blr
  32. memreadlinetime_end:
  33.  
  34.     .size    memreadlinetime,memreadlinetime_end-memreadlinetime
  35.     .type    memreadlinetime,@function
  36.  
  37.     xdef    memreadline
  38. memreadline:
  39. ;memreadline(address,lines,loop)
  40. ;memreadline(gpr3,gpr4,gpr5)
  41.     srwi    gpr4,gpr4,#2        ;/4 == 4 lines each loop
  42. .retryloop:
  43.     mr    gpr6,gpr3        ;reload buffer address
  44.     mtctr    gpr4            ;load datamove counter
  45. .loop:
  46. ;Only load first long word, so it doesn`t stall until the whole line is read
  47. ;doesn`t matter if it`s the last instruction because of the Retry*Size loop this
  48. ;small speed up doesn`t matter
  49.     lwz    gpr0,0(gpr6)
  50.     lwz    gpr7,32(gpr6)
  51.     lwz    gpr8,64(gpr6)
  52.     lwz    gpr9,96(gpr6)
  53.     addi    gpr6,gpr6,#4*32
  54.     bdnz    .loop
  55.     addic.    gpr5,gpr5,#-1
  56.     bne    .retryloop
  57.  
  58.     blr
  59. memreadline_end:
  60.  
  61.     .size    memreadline,memreadline_end-memreadline
  62.     .type    memreadline,@function
  63.  
  64.  
  65.  
  66. **********************************************************************
  67. **********************************************************************
  68. **********************************************************************
  69. **********************************************************************
  70.  
  71.  
  72.     xdef    memwritelinetime
  73. memwritelinetime:
  74. ;memwritelinetime(address,lines,loop)
  75. ;memwritelinetime(gpr3,gpr4,gpr5)
  76. ;A copyback write means
  77. ;loop:
  78. ;READ LINE
  79. ;CHANGE IT
  80. ;WRITE DIRTY LINE IF NO EMPTY PLACE
  81. ;goto loop
  82. ;so we have to subtract the read burst performance
  83.     srwi    gpr4,gpr4,#2        ;/4 == 4 lines each loop
  84. .retryloop:
  85.     mr    gpr6,gpr3        ;reload buffer address
  86.     mtctr    gpr4            ;load datamove counter
  87. .loop:
  88. ;Only load first long word, so it doesn`t stall until the whole line is read
  89. ;doesn`t matter if it`s the last load instruction because of the Retry*Size loop this
  90. ;small speed up doesn`t matter if the chip is able to pass the data while the cache
  91. ;line isn`t fully loaded yet.
  92.     lwz    gpr0,0(gpr6)
  93.     lwz    gpr7,32(gpr6)
  94.     lwz    gpr8,64(gpr6)
  95.     lwz    gpr9,96(gpr6)
  96.     addi    gpr6,gpr6,#4*32
  97.     bdnz    .loop
  98.     addic.    gpr5,gpr5,#-1
  99.     bne    .retryloop
  100.     blr
  101. memwritelinetime_end:
  102.  
  103.     .size    memwritelinetime,memwritelinetime_end-memwritelinetime
  104.     .type    memwritelinetime,@function
  105.  
  106.  
  107.     xdef    memwriteline
  108. memwriteline:
  109. ;memwriteline(address,lines,loop)
  110. ;memwriteline(gpr3,gpr4,gpr5)
  111.     srwi    gpr4,gpr4,#2        ;/4 == 4 lines each loop
  112. .retryloop:
  113.     mr    gpr6,gpr3        ;reload buffer address
  114.     mtctr    gpr4            ;load datamove counter
  115. .loop:
  116.     stw    gpr0,0(gpr6)
  117.     stw    gpr7,32(gpr6)
  118.     stw    gpr8,64(gpr6)
  119.     stw    gpr9,96(gpr6)
  120.     addi    gpr6,gpr6,#4*32        ;4 Lines
  121.     bdnz    .loop
  122.     addic.    gpr5,gpr5,#-1
  123.     bne    .retryloop
  124.     blr
  125. memwriteline_end:
  126.  
  127.     .size    memwriteline,memwriteline_end-memwriteline
  128.     .type    memwriteline,@function
  129.  
  130.  
  131. **********************************************************************
  132. **********************************************************************
  133. **********************************************************************
  134. **********************************************************************
  135. **********************************************************************
  136. **********************************************************************
  137. **********************************************************************
  138. **********************************************************************
  139.  
  140. ;This routine writes long in a linear way, so
  141. ;that a possible writebuffer could combine the
  142. ;writes to a line burst which would be useful
  143. ;to access a gfxcard.
  144. ;the ppc could do this for a non guard(non synchronized)
  145. ;non cache area....gfxcard`s framebuffer
  146. ;COULD is the magic word here.
  147.  
  148.  
  149.     xdef    memwritelinetime2
  150. memwritelinetime2:
  151. ;memwritelinetime2(address,lines,loop)
  152. ;memwritelinetime2(gpr3,gpr4,gpr5)
  153.     stwu    1,-16(1)
  154.     stw    31,12(1)
  155.     stw    30,8(1)
  156.     stw    29,4(1)
  157.  
  158. .retryloop:
  159.     mr    gpr6,gpr3        ;reload buffer address
  160.     mtctr    gpr4            ;load datamove counter
  161. .loop:
  162.     ori    0,0,0
  163.     ori    0,0,0
  164.     ori    0,0,0
  165.     ori    0,0,0
  166.     ori    0,0,0
  167.     ori    0,0,0
  168.     ori    0,0,0
  169.     ori    0,0,0
  170.     addi    gpr6,gpr6,#32
  171.     bdnz    .loop
  172.     addic.    gpr5,gpr5,#-1
  173.     bne    .retryloop
  174.  
  175.     lwz    29,4(1)
  176.     lwz    30,8(1)
  177.     lwz    31,12(1)
  178.     addi    1,1,16
  179.     blr
  180. memwritelinetime2_end:
  181.  
  182.     .size    memwritelinetime2,memwritelinetime2_end-memwritelinetime2
  183.     .type    memwritelinetime2,@function
  184.  
  185.  
  186.     xdef    memwriteline2
  187. memwriteline2:
  188. ;memwriteline2(address,lines,loop)
  189. ;memwriteline2(gpr3,gpr4,gpr5)
  190.     stwu    1,-16(1)
  191.     stw    31,12(1)
  192.     stw    30,8(1)
  193.     stw    29,4(1)
  194.  
  195. .retryloop:
  196.     mr    gpr6,gpr3        ;reload buffer address
  197.     mtctr    gpr4            ;load datamove counter
  198. .loop:
  199.     stw    gpr0,0(gpr6)
  200.     stw    gpr7,4(gpr6)
  201.     stw    gpr8,8(gpr6)
  202.     stw    gpr9,12(gpr6)
  203.     stw    gpr10,16(gpr6)
  204.     stw    gpr31,20(gpr6)
  205.     stw    gpr30,24(gpr6)
  206.     stw    gpr29,28(gpr6)
  207.     addi    gpr6,gpr6,#32
  208.     bdnz    .loop
  209.     addic.    gpr5,gpr5,#-1
  210.     bne    .retryloop
  211.  
  212.     lwz    29,4(1)
  213.     lwz    30,8(1)
  214.     lwz    31,12(1)
  215.     addi    1,1,16
  216.     blr
  217. memwriteline2_end:
  218.  
  219.     .size    memwriteline2,memwriteline2_end-memwriteline2
  220.     .type    memwriteline2,@function
  221.  
  222.  
  223.  
  224. **********************************************************************
  225. **********************************************************************
  226. **********************************************************************
  227. **********************************************************************
  228. **********************************************************************
  229. **********************************************************************
  230. **********************************************************************
  231. **********************************************************************
  232.  
  233.  
  234.     xdef    memwritelongtime
  235. memwritelongtime:
  236. ;memwritelongtime(address,lines,loop)
  237. ;memwritelongtime(gpr3,gpr4,gpr5)
  238.     stwu    1,-16(1)
  239.     stw    31,12(1)
  240.     stw    30,8(1)
  241.     stw    29,4(1)
  242.  
  243. .retryloop:
  244.     mr    gpr6,gpr3        ;reload buffer address
  245.     mtctr    gpr4            ;load datamove counter
  246. .loop:
  247.     ori    0,0,0
  248.     ori    0,0,0
  249.     ori    0,0,0
  250.     ori    0,0,0
  251.     ori    0,0,0
  252.     ori    0,0,0
  253.     ori    0,0,0
  254.     ori    0,0,0
  255.     addi    gpr6,gpr6,#32
  256.     bdnz    .loop
  257.     addic.    gpr5,gpr5,#-1
  258.     bne    .retryloop
  259.  
  260.     lwz    29,4(1)
  261.     lwz    30,8(1)
  262.     lwz    31,12(1)
  263.     addi    1,1,16
  264.     blr
  265. memwritelongtime_end:
  266.  
  267.     .size    memwritelongtime,memwritelongtime_end-memwritelongtime
  268.     .type    memwritelongtime,@function
  269.  
  270.  
  271.     xdef    memwritelong
  272. memwritelong:
  273. ;memwritelong(address,lines,loop)
  274. ;memwritelong(gpr3,gpr4,gpr5)
  275.     stwu    1,-16(1)
  276.     stw    31,12(1)
  277.     stw    30,8(1)
  278.     stw    29,4(1)
  279.  
  280. .retryloop:
  281.     mr    gpr6,gpr3        ;reload buffer address
  282.     mtctr    gpr4            ;load datamove counter
  283. .loop:
  284.     stw    gpr0,0(gpr6)
  285.     stw    gpr7,4(gpr6)
  286.     stw    gpr8,8(gpr6)
  287.     stw    gpr9,12(gpr6)
  288.     stw    gpr10,16(gpr6)
  289.     stw    gpr31,20(gpr6)
  290.     stw    gpr30,24(gpr6)
  291.     stw    gpr29,28(gpr6)
  292.     addi    gpr6,gpr6,#32
  293.     bdnz    .loop
  294.     addic.    gpr5,gpr5,#-1
  295.     bne    .retryloop
  296.  
  297.     lwz    29,4(1)
  298.     lwz    30,8(1)
  299.     lwz    31,12(1)
  300.     addi    1,1,16
  301.     blr
  302. memwritelong_end:
  303.  
  304.     .size    memwritelong,memwritelong_end-memwritelong
  305.     .type    memwritelong,@function
  306.  
  307.  
  308. **********************************************************************
  309. **********************************************************************
  310. **********************************************************************
  311. **********************************************************************
  312.  
  313.  
  314. **********************************************************************
  315. **********************************************************************
  316. **********************************************************************
  317. **********************************************************************
  318.  
  319.  
  320.     xdef    memwritewordtime
  321. memwritewordtime:
  322. ;memwritewordtime(address,lines,loop)
  323. ;memwritewordtime(gpr3,gpr4,gpr5)
  324.     stwu    1,-16(1)
  325.     stw    31,12(1)
  326.     stw    30,8(1)
  327.     stw    29,4(1)
  328.  
  329. .retryloop:
  330.     mr    gpr6,gpr3        ;reload buffer address
  331.     mtctr    gpr4            ;load datamove counter
  332. .loop:
  333.     ori    0,0,0
  334.     ori    0,0,0
  335.     ori    0,0,0
  336.     ori    0,0,0
  337.     ori    0,0,0
  338.     ori    0,0,0
  339.     ori    0,0,0
  340.     ori    0,0,0
  341.     ori    0,0,0
  342.     ori    0,0,0
  343.     ori    0,0,0
  344.     ori    0,0,0
  345.     ori    0,0,0
  346.     ori    0,0,0
  347.     ori    0,0,0
  348.     ori    0,0,0
  349.     addi    gpr6,gpr6,#32
  350.     bdnz    .loop
  351.     addic.    gpr5,gpr5,#-1
  352.     bne    .retryloop
  353.  
  354.     lwz    29,4(1)
  355.     lwz    30,8(1)
  356.     lwz    31,12(1)
  357.     addi    1,1,16
  358.     blr
  359. memwritewordtime_end:
  360.  
  361.     .size    memwritewordtime,memwritewordtime_end-memwritewordtime
  362.     .type    memwritewordtime,@function
  363.  
  364.  
  365.     xdef    memwriteword
  366. memwriteword:
  367. ;memwriteword(address,lines,loop)
  368. ;memwriteword(gpr3,gpr4,gpr5)
  369.     stwu    1,-16(1)
  370.     stw    31,12(1)
  371.     stw    30,8(1)
  372.     stw    29,4(1)
  373.  
  374. .retryloop:
  375.     mr    gpr6,gpr3        ;reload buffer address
  376.     mtctr    gpr4            ;load datamove counter
  377. .loop:
  378.     sth    gpr0,0(gpr6)
  379.     sth    gpr7,2(gpr6)
  380.     sth    gpr8,4(gpr6)
  381.     sth    gpr9,6(gpr6)
  382.     sth    gpr10,8(gpr6)
  383.     sth    gpr31,10(gpr6)
  384.     sth    gpr30,12(gpr6)
  385.     sth    gpr29,14(gpr6)
  386.     sth    gpr0,16+0(gpr6)
  387.     sth    gpr7,16+2(gpr6)
  388.     sth    gpr8,16+4(gpr6)
  389.     sth    gpr9,16+6(gpr6)
  390.     sth    gpr10,16+8(gpr6)
  391.     sth    gpr31,16+10(gpr6)
  392.     sth    gpr30,16+12(gpr6)
  393.     sth    gpr29,16+14(gpr6)
  394.     addi    gpr6,gpr6,#32
  395.     bdnz    .loop
  396.     addic.    gpr5,gpr5,#-1
  397.     bne    .retryloop
  398.  
  399.     lwz    29,4(1)
  400.     lwz    30,8(1)
  401.     lwz    31,12(1)
  402.     addi    1,1,16
  403.     blr
  404. memwriteword_end:
  405.  
  406.     .size    memwriteword,memwriteword_end-memwriteword
  407.     .type    memwriteword,@function
  408.  
  409.  
  410. **********************************************************************
  411. **********************************************************************
  412. **********************************************************************
  413. **********************************************************************
  414.  
  415.  
  416. **********************************************************************
  417. **********************************************************************
  418. **********************************************************************
  419. **********************************************************************
  420.  
  421.  
  422.     xdef    memwritebytetime
  423. memwritebytetime:
  424. ;memwritebytetime(address,lines,loop)
  425. ;memwritebytetime(gpr3,gpr4,gpr5)
  426.     stwu    1,-16(1)
  427.     stw    31,12(1)
  428.     stw    30,8(1)
  429.     stw    29,4(1)
  430.  
  431. .retryloop:
  432.     mr    gpr6,gpr3        ;reload buffer address
  433.     mtctr    gpr4            ;load datamove counter
  434. .loop:
  435.     ori    0,0,0
  436.     ori    0,0,0
  437.     ori    0,0,0
  438.     ori    0,0,0
  439.     ori    0,0,0
  440.     ori    0,0,0
  441.     ori    0,0,0
  442.     ori    0,0,0
  443.     ori    0,0,0
  444.     ori    0,0,0
  445.     ori    0,0,0
  446.     ori    0,0,0
  447.     ori    0,0,0
  448.     ori    0,0,0
  449.     ori    0,0,0
  450.     ori    0,0,0
  451.     ori    0,0,0
  452.     ori    0,0,0
  453.     ori    0,0,0
  454.     ori    0,0,0
  455.     ori    0,0,0
  456.     ori    0,0,0
  457.     ori    0,0,0
  458.     ori    0,0,0
  459.     ori    0,0,0
  460.     ori    0,0,0
  461.     ori    0,0,0
  462.     ori    0,0,0
  463.     ori    0,0,0
  464.     ori    0,0,0
  465.     ori    0,0,0
  466.     ori    0,0,0
  467.     addi    gpr6,gpr6,#32
  468.     bdnz    .loop
  469.     addic.    gpr5,gpr5,#-1
  470.     bne    .retryloop
  471.  
  472.     lwz    29,4(1)
  473.     lwz    30,8(1)
  474.     lwz    31,12(1)
  475.     addi    1,1,16
  476.     blr
  477. memwritebytetime_end:
  478.  
  479.     .size    memwritebytetime,memwritebytetime_end-memwritebytetime
  480.     .type    memwritebytetime,@function
  481.  
  482.  
  483.     xdef    memwritebyte
  484. memwritebyte:
  485. ;memwritebyte(address,lines,loop)
  486. ;memwritebyte(gpr3,gpr4,gpr5)
  487.     stwu    1,-16(1)
  488.     stw    31,12(1)
  489.     stw    30,8(1)
  490.     stw    29,4(1)
  491.  
  492. .retryloop:
  493.     mr    gpr6,gpr3        ;reload buffer address
  494.     mtctr    gpr4            ;load datamove counter
  495. .loop:
  496.     stb    gpr0,0(gpr6)
  497.     stb    gpr7,1(gpr6)
  498.     stb    gpr8,2(gpr6)
  499.     stb    gpr9,3(gpr6)
  500.     stb    gpr10,4(gpr6)
  501.     stb    gpr31,5(gpr6)
  502.     stb    gpr30,6(gpr6)
  503.     stb    gpr29,7(gpr6)
  504.     stb    gpr0,8(gpr6)
  505.     stb    gpr7,9(gpr6)
  506.     stb    gpr8,10(gpr6)
  507.     stb    gpr9,11(gpr6)
  508.     stb    gpr10,12(gpr6)
  509.     stb    gpr31,13(gpr6)
  510.     stb    gpr30,14(gpr6)
  511.     stb    gpr29,15(gpr6)
  512.  
  513.     stb    gpr0,16+0(gpr6)
  514.     stb    gpr7,16+1(gpr6)
  515.     stb    gpr8,16+2(gpr6)
  516.     stb    gpr9,16+3(gpr6)
  517.     stb    gpr10,16+4(gpr6)
  518.     stb    gpr31,16+5(gpr6)
  519.     stb    gpr30,16+6(gpr6)
  520.     stb    gpr29,16+7(gpr6)
  521.     stb    gpr0,16+8(gpr6)
  522.     stb    gpr7,16+9(gpr6)
  523.     stb    gpr8,16+10(gpr6)
  524.     stb    gpr9,16+11(gpr6)
  525.     stb    gpr10,16+12(gpr6)
  526.     stb    gpr31,16+13(gpr6)
  527.     stb    gpr30,16+14(gpr6)
  528.     stb    gpr29,16+15(gpr6)
  529.  
  530.     addi    gpr6,gpr6,#32
  531.     bdnz    .loop
  532.     addic.    gpr5,gpr5,#-1
  533.     bne    .retryloop
  534.  
  535.     lwz    29,4(1)
  536.     lwz    30,8(1)
  537.     lwz    31,12(1)
  538.     addi    1,1,16
  539.     blr
  540. memwritebyte_end:
  541.  
  542.     .size    memwritebyte,memwritebyte_end-memwritebyte
  543.     .type    memwritebyte,@function
  544.  
  545.  
  546.  
  547.  
  548. **********************************************************************
  549. **********************************************************************
  550. **********************************************************************
  551. **********************************************************************
  552. **********************************************************************
  553. **********************************************************************
  554. **********************************************************************
  555. **********************************************************************
  556.  
  557.  
  558.     xdef    memreadlonglongtime
  559. memreadlonglongtime:
  560. ;memreadlonglongtime(address,lines,loop)
  561. ;memreadlonglongtime(gpr3,gpr4,gpr5)
  562.     stwu    1,-16(1)
  563.     stw    31,12(1)
  564.     stw    30,8(1)
  565.     stw    29,4(1)
  566.  
  567. .retryloop:
  568.     mr    gpr6,gpr3        ;reload buffer address
  569.     mtctr    gpr4            ;load datamove counter
  570. .loop:
  571.     ori    0,0,0
  572.     ori    0,0,0
  573.     ori    0,0,0
  574.     ori    0,0,0
  575.     addi    gpr6,gpr6,#32
  576.     bdnz    .loop
  577.     addic.    gpr5,gpr5,#-1
  578.     bne    .retryloop
  579.  
  580.     lwz    29,4(1)
  581.     lwz    30,8(1)
  582.     lwz    31,12(1)
  583.     addi    1,1,16
  584.     blr
  585. memreadlonglongtime_end:
  586.  
  587.     .size    memreadlonglongtime,memreadlonglongtime_end-memreadlonglongtime
  588.     .type    memreadlonglongtime,@function
  589.  
  590.  
  591.     xdef    memreadlonglong
  592. memreadlonglong:
  593. ;memreadlonglong(address,lines,loop)
  594. ;memreadlonglong(gpr3,gpr4,gpr5)
  595. ;->Size     =4096
  596. ;->LoopCount=10000
  597. ;->(4096>>5) * (4*2+2) * 10000 + 10000
  598. ;->128 * 10 *10000 + 10000
  599. ;->12810000 cycles
  600. ;->200*10^6 Mhz / 12810000 = 15.613
  601. ;->10000 * 4096 * 15.613(64bit accesses) = 640MB
  602. ;with Cachemem the max bandwidth would be
  603. ;at 200Mhz with 64bit fpu transfers
  604. ;800MB(200/(2+2+2+2)*32)
  605.  
  606.  
  607.     stwu    1,-16(1)
  608.     stw    31,12(1)
  609.     stw    30,8(1)
  610.     stw    29,4(1)
  611.  
  612. .retryloop:
  613.     mr    gpr6,gpr3        ;reload buffer address
  614.     mtctr    gpr4            ;load datamove counter
  615. .loop:
  616.     lfd    fpr0,0(gpr6)
  617.     lfd    fpr3,8(gpr6)
  618.     lfd    fpr4,16(gpr6)
  619.     lfd    fpr5,24(gpr6)
  620.     addi    gpr6,gpr6,#32
  621.     bdnz    .loop
  622.     addic.    gpr5,gpr5,#-1
  623.     bne    .retryloop
  624.  
  625.     lwz    29,4(1)
  626.     lwz    30,8(1)
  627.     lwz    31,12(1)
  628.     addi    1,1,16
  629.     blr
  630. memreadlonglong_end:
  631.  
  632.     .size    memreadlonglong,memreadlonglong_end-memreadlonglong
  633.     .type    memreadlonglong,@function
  634.  
  635.  
  636. **********************************************************************
  637. **********************************************************************
  638. **********************************************************************
  639. **********************************************************************
  640.  
  641.     xdef    memreadlongtime
  642. memreadlongtime:
  643. ;memreadlongtime(address,lines,loop)
  644. ;memreadlongtime(gpr3,gpr4,gpr5)
  645.     stwu    1,-16(1)
  646.     stw    31,12(1)
  647.     stw    30,8(1)
  648.     stw    29,4(1)
  649.  
  650. .retryloop:
  651.     mr    gpr6,gpr3        ;reload buffer address
  652.     mtctr    gpr4            ;load datamove counter
  653. .loop:
  654.     ori    0,0,0
  655.     ori    0,0,0
  656.     ori    0,0,0
  657.     ori    0,0,0
  658.     ori    0,0,0
  659.     ori    0,0,0
  660.     ori    0,0,0
  661.     ori    0,0,0
  662.     addi    gpr6,gpr6,#32
  663.     bdnz    .loop
  664.     addic.    gpr5,gpr5,#-1
  665.     bne    .retryloop
  666.  
  667.     lwz    29,4(1)
  668.     lwz    30,8(1)
  669.     lwz    31,12(1)
  670.     addi    1,1,16
  671.     blr
  672. memreadlongtime_end:
  673.  
  674.     .size    memreadlongtime,memreadlongtime_end-memreadlongtime
  675.     .type    memreadlongtime,@function
  676.  
  677.  
  678.     xdef    memreadlong
  679. memreadlong:
  680. ;memreadlong(address,lines,loop)
  681. ;memreadlong(gpr3,gpr4,gpr5)
  682. ;->Size     =4096
  683. ;->LoopCount=10000
  684. ;->(4096>>5) * (8*2+2) * 10000 + 10000
  685. ;->128 * 18 *10000 + 10000
  686. ;->2305000 cycles
  687. ;->200*10^6 / 2305000 = 8.68
  688. ;->10000 * 4096 * 8.68(32bit accesses) = 355MB
  689. ;with Cachemem the max bandwidth would be
  690. ;at 200Mhz with 64bit fpu transfers
  691. ;400MB(200/(2+2+2+2+2+2+2+2)*32)
  692.  
  693.  
  694.     stwu    1,-16(1)
  695.     stw    31,12(1)
  696.     stw    30,8(1)
  697.     stw    29,4(1)
  698.  
  699. .retryloop:
  700.     mr    gpr6,gpr3        ;reload buffer address
  701.     mtctr    gpr4            ;load datamove counter
  702. .loop:
  703.     lwz    gpr0,0(gpr6)
  704.     lwz    gpr7,4(gpr6)
  705.     lwz    gpr8,8(gpr6)
  706.     lwz    gpr9,12(gpr6)
  707.     lwz    gpr10,16(gpr6)
  708.     lwz    gpr31,20(gpr6)
  709.     lwz    gpr30,24(gpr6)
  710.     lwz    gpr29,28(gpr6)
  711.     addi    gpr6,gpr6,#32
  712.     bdnz    .loop
  713.     addic.    gpr5,gpr5,#-1
  714.     bne    .retryloop
  715.  
  716.     lwz    29,4(1)
  717.     lwz    30,8(1)
  718.     lwz    31,12(1)
  719.     addi    1,1,16
  720.     blr
  721. memreadlong_end:
  722.  
  723.     .size    memreadlong,memreadlong_end-memreadlong
  724.     .type    memreadlong,@function
  725.  
  726.  
  727. **********************************************************************
  728. **********************************************************************
  729. **********************************************************************
  730. **********************************************************************
  731.  
  732.  
  733.     xdef    memreadwordtime
  734. memreadwordtime:
  735. ;memreadwordtime(address,lines,loop)
  736. ;memreadwordtime(gpr3,gpr4,gpr5)
  737.     stwu    1,-16(1)
  738.     stw    31,12(1)
  739.     stw    30,8(1)
  740.     stw    29,4(1)
  741.  
  742. .retryloop:
  743.     mr    gpr6,gpr3        ;reload buffer address
  744.     mtctr    gpr4            ;load datamove counter
  745. .loop:
  746.     ori    0,0,0
  747.     ori    0,0,0
  748.     ori    0,0,0
  749.     ori    0,0,0
  750.     ori    0,0,0
  751.     ori    0,0,0
  752.     ori    0,0,0
  753.     ori    0,0,0
  754.     ori    0,0,0
  755.     ori    0,0,0
  756.     ori    0,0,0
  757.     ori    0,0,0
  758.     ori    0,0,0
  759.     ori    0,0,0
  760.     ori    0,0,0
  761.     ori    0,0,0
  762.     addi    gpr6,gpr6,#32
  763.     bdnz    .loop
  764.     addic.    gpr5,gpr5,#-1
  765.     bne    .retryloop
  766.  
  767.     lwz    29,4(1)
  768.     lwz    30,8(1)
  769.     lwz    31,12(1)
  770.     addi    1,1,16
  771.     blr
  772. memreadwordtime_end:
  773.  
  774.     .size    memreadwordtime,memreadwordtime_end-memreadwordtime
  775.     .type    memreadwordtime,@function
  776.  
  777.  
  778.     xdef    memreadword
  779. memreadword:
  780. ;memreadword(address,lines,loop)
  781. ;memreadword(gpr3,gpr4,gpr5)
  782.     stwu    1,-16(1)
  783.     stw    31,12(1)
  784.     stw    30,8(1)
  785.     stw    29,4(1)
  786.  
  787. .retryloop:
  788.     mr    gpr6,gpr3        ;reload buffer address
  789.     mtctr    gpr4            ;load datamove counter
  790. .loop:
  791.     lhz    gpr0,0(gpr6)
  792.     lhz    gpr7,2(gpr6)
  793.     lhz    gpr8,4(gpr6)
  794.     lhz    gpr9,6(gpr6)
  795.     lhz    gpr10,8(gpr6)
  796.     lhz    gpr31,10(gpr6)
  797.     lhz    gpr30,12(gpr6)
  798.     lhz    gpr29,14(gpr6)
  799.     lhz    gpr0,16+0(gpr6)
  800.     lhz    gpr7,16+2(gpr6)
  801.     lhz    gpr8,16+4(gpr6)
  802.     lhz    gpr9,16+6(gpr6)
  803.     lhz    gpr10,16+8(gpr6)
  804.     lhz    gpr31,16+10(gpr6)
  805.     lhz    gpr30,16+12(gpr6)
  806.     lhz    gpr29,16+14(gpr6)
  807.     addi    gpr6,gpr6,#32
  808.     bdnz    .loop
  809.     addic.    gpr5,gpr5,#-1
  810.     bne    .retryloop
  811.  
  812.     lwz    29,4(1)
  813.     lwz    30,8(1)
  814.     lwz    31,12(1)
  815.     addi    1,1,16
  816.     blr
  817. memreadword_end:
  818.  
  819.     .size    memreadword,memreadword_end-memreadword
  820.     .type    memreadword,@function
  821.  
  822.  
  823. **********************************************************************
  824. **********************************************************************
  825. **********************************************************************
  826. **********************************************************************
  827.  
  828.  
  829.     xdef    memreadbytetime
  830. memreadbytetime:
  831. ;memreadbytetime(address,lines,loop)
  832. ;memreadbytetime(gpr3,gpr4,gpr5)
  833.     stwu    1,-16(1)
  834.     stw    31,12(1)
  835.     stw    30,8(1)
  836.     stw    29,4(1)
  837.  
  838. .retryloop:
  839.     mr    gpr6,gpr3        ;reload buffer address
  840.     mtctr    gpr4            ;load datamove counter
  841. .loop:
  842.     ori    0,0,0
  843.     ori    0,0,0
  844.     ori    0,0,0
  845.     ori    0,0,0
  846.     ori    0,0,0
  847.     ori    0,0,0
  848.     ori    0,0,0
  849.     ori    0,0,0
  850.     ori    0,0,0
  851.     ori    0,0,0
  852.     ori    0,0,0
  853.     ori    0,0,0
  854.     ori    0,0,0
  855.     ori    0,0,0
  856.     ori    0,0,0
  857.     ori    0,0,0
  858.     ori    0,0,0
  859.     ori    0,0,0
  860.     ori    0,0,0
  861.     ori    0,0,0
  862.     ori    0,0,0
  863.     ori    0,0,0
  864.     ori    0,0,0
  865.     ori    0,0,0
  866.     ori    0,0,0
  867.     ori    0,0,0
  868.     ori    0,0,0
  869.     ori    0,0,0
  870.     ori    0,0,0
  871.     ori    0,0,0
  872.     ori    0,0,0
  873.     ori    0,0,0
  874.     addi    gpr6,gpr6,#32
  875.     bdnz    .loop
  876.     addic.    gpr5,gpr5,#-1
  877.     bne    .retryloop
  878.  
  879.     lwz    29,4(1)
  880.     lwz    30,8(1)
  881.     lwz    31,12(1)
  882.     addi    1,1,16
  883.     blr
  884. memreadbytetime_end:
  885.  
  886.     .size    memreadbytetime,memreadbytetime_end-memreadbytetime
  887.     .type    memreadbytetime,@function
  888.  
  889.  
  890.     xdef    memreadbyte
  891. memreadbyte:
  892. ;memreadbyte(address,lines,loop)
  893. ;memreadbyte(gpr3,gpr4,gpr5)
  894.     stwu    1,-16(1)
  895.     stw    31,12(1)
  896.     stw    30,8(1)
  897.     stw    29,4(1)
  898.  
  899. .retryloop:
  900.     mr    gpr6,gpr3        ;reload buffer address
  901.     mtctr    gpr4            ;load datamove counter
  902. .loop:
  903.     lbz    gpr0,0(gpr6)
  904.     lbz    gpr7,1(gpr6)
  905.     lbz    gpr8,2(gpr6)
  906.     lbz    gpr9,3(gpr6)
  907.     lbz    gpr10,4(gpr6)
  908.     lbz    gpr31,5(gpr6)
  909.     lbz    gpr30,6(gpr6)
  910.     lbz    gpr29,7(gpr6)
  911.     lbz    gpr0,8(gpr6)
  912.     lbz    gpr7,9(gpr6)
  913.     lbz    gpr8,10(gpr6)
  914.     lbz    gpr9,11(gpr6)
  915.     lbz    gpr10,12(gpr6)
  916.     lbz    gpr31,13(gpr6)
  917.     lbz    gpr30,14(gpr6)
  918.     lbz    gpr29,15(gpr6)
  919.  
  920.     lbz    gpr0,16+0(gpr6)
  921.     lbz    gpr7,16+1(gpr6)
  922.     lbz    gpr8,16+2(gpr6)
  923.     lbz    gpr9,16+3(gpr6)
  924.     lbz    gpr10,16+4(gpr6)
  925.     lbz    gpr31,16+5(gpr6)
  926.     lbz    gpr30,16+6(gpr6)
  927.     lbz    gpr29,16+7(gpr6)
  928.     lbz    gpr0,16+8(gpr6)
  929.     lbz    gpr7,16+9(gpr6)
  930.     lbz    gpr8,16+10(gpr6)
  931.     lbz    gpr9,16+11(gpr6)
  932.     lbz    gpr10,16+12(gpr6)
  933.     lbz    gpr31,16+13(gpr6)
  934.     lbz    gpr30,16+14(gpr6)
  935.     lbz    gpr29,16+15(gpr6)
  936.  
  937.     addi    gpr6,gpr6,#32
  938.     bdnz    .loop
  939.     addic.    gpr5,gpr5,#-1
  940.     bne    .retryloop
  941.  
  942.     lwz    29,4(1)
  943.     lwz    30,8(1)
  944.     lwz    31,12(1)
  945.     addi    1,1,16
  946.     blr
  947. memreadbyte_end:
  948.  
  949.     .size    memreadbyte,memreadbyte_end-memreadbyte
  950.     .type    memreadbyte,@function
  951.  
  952.  
  953. **********************************************************************
  954. **********************************************************************
  955. **********************************************************************
  956. **********************************************************************
  957.